6.8 选择指定级别数据
对指定索引层级选择,可以使用df.xs()函数,该函数使用一个关键参数来选择分层索引特定级别的数据,结构如下:
df.xs(key,axis=0,level=None,drop_level=True)
key :指定索引标签,可以指定单级标签,也可以指定多组级标签,多级标签需要放置在元组
axis :0或index表示对行索引的操作,1或columns表示对列索引的操作,默认值为0。
Level :对指定层级做索引选择,默认为n层,级别可以通过标签或数字引用。
drop_level :是否删除选择层级的数据,默认为True.
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.多层索引区域选择.xlsx" , header =[ 0,1,2 ], index_col =[ 0,1,2 ])
df.sort_index(level=[ 0,1,2 ], inplace = True )
df1=df.xs( "销售1部" , level = "部门" , drop_level = False )
# df=df.xs("销售1部",level=1,drop_level=False) #结果同上
# df2=df.xs("配件",level="中类",drop_level=False,axis=1) #结果同下
df2=df.xs( "配件" , level = 1 , drop_level = False , axis = 1 )
print (df1)
print ("------------------------------------")
print (df2)
大类 | 硬件 | 软件 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
中类 | 整机 | 配件 | 办公 | 编程 | ||||||
小类 | PC | 笔记本 | CPU | 主板 | 显卡 | Excel | Word | Python | ||
地区 | 部门 | 代号 | ||||||||
上海 | 销售1部 | A | 2 | 7 | 3 | 2 | 9 | 66 | 9 | 55 |
B | 12 | 5 | 45 | 15 | 12 | 24 | 13 | 41 | ||
北京 | 销售1部 | A | 99 | 55 | 22 | 18 | 31 | 66 | 56 | 78 |
B | 23 | 34 | 13 | 42 | 45 | 99 | 67 | 60 | ||
成都 | 销售1部 | A | 24 | 96 | 11 | 99 | 78 | 56 | 18 | 12 |
大类 | 硬件 | ||||
---|---|---|---|---|---|
中类 | 配件 | ||||
小类 | CPU | 主板 | 显卡 | ||
地区 | 部门 | 代号 | |||
上海 | 销售1部 | A | 3 | 2 | 9 |
B | 45 | 15 | 12 | ||
销售2部 | C | 12 | 64 | 65 | |
北京 | 销售1部 | A | 22 | 18 | 31 |
B | 13 | 42 | 45 | ||
销售2部 | C | 35 | 66 | 21 | |
D | 45 | 12 | 45 | ||
成都 | 销售1部 | A | 11 | 99 | 78 |
销售2部 | B | 58 | 11 | 44 |
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.多层索引区域选择.xlsx" , header =[ 0,1,2 ], index_col =[ 0,1,2 ])
df.sort_index(level=[ 0,1,2 ], inplace = True )
df=df.xs(( "销售1部","北京" ), level =( "部门","地区" ), drop_level = False )
print (df)
返回:
大类 | 硬件 | 软件 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
中类 | 整机 | 配件 | 办公 | 编程 | ||||||
小类 | PC | 笔记本 | CPU | 主板 | 显卡 | Excel | Word | Python | ||
地区 | 部门 | 代号 | ||||||||
北京 | 销售1部 | A | 99 | 55 | 22 | 18 | 31 | 66 | 56 | 78 |
B | 23 | 34 | 13 | 42 | 45 | 99 | 67 | 60 |